package com.sz.common.pay.citic.entity.transfer;

import com.sz.common.pay.citic.constant.RequestCode;
import lombok.Data;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.math.BigDecimal;

/**
 * Created by siqishangshu on 17/10/16.
 * <p>
 * 对外支付
 * 对应请求代码： DLOUTTRN
 * 说明：客户可使用该接口实现支付转账功能，支持7种支付方式：
 * 00-汇票
 * 01-中信内部转账
 * 02-大额支付
 * 03-小额支付
 * 04-同城票交
 * 05-网银跨行支付
 * B5-大额夜间支付
 * <p>
 * 对外支付只支持人民币账户交易；
 * 支付方式为00-汇票时，收方账号可空；
 * 支付方式为01-中信内部转账时，收方账号必须为中信账号，支持实体账号、附属账号、个人账号或卡号，当收方账号为个人账号或卡号时，摘要字段必输；
 * 支付方式为02-大额支付时，当前日期必须为工作日且当前时间为工作时间：9:00-17:00；
 * 支付方式为02-大额支付、03-小额支付两种支付方式时，若收款账户开户行联行网点号为空且收款账户开户行名输入错误，则对外支付交易将在银行柜面落地处理；
 * 常用收款账户开户行总行行号如下表所示，收款账户开户行联行网点号只填写总行行号即可实现大、小额交易不落地处理。
 * 收款账户银行名称	                 收款账户开户行联行网点号
 * 中国工商银行总行清算中心	            102100099996
 * 中国农业银行资金清算中心	            103100000026
 * 中国银行总行	                        104100000004
 * 中国建设银行总行（不受理个人业务）	    105100000017
 * 交通银行	                            301290000007
 * 招商银行                           	308584000013
 * 平安银行	                            307584007998
 * 上海浦东发展银行	                    310290000013
 * 兴业银行总行	                        309391000011
 * 中国民生银行总行	                    305100000013
 * 中国光大银行	                        303100000006
 * 中国邮政储蓄银行总行	                403100000004
 * 广发银行股份有限公司	                306581000003
 * 支付方式为05-网银跨行支付时，录入字段recBankNo(收款人所属银行行号)由3.15.7网银互联参与机构信息查询获取。
 * 支付方式为B5-大额夜间支付时，不支持预约。
 * <p>
 * 请求报文
 * <?xml version="1.0" encoding="GBK"?>
 * <stream>
 * <action>DLOUTTRN</action>
 * <userName></userName><!--登录名 char(30)-->
 * <clientID></clientID><!--客户流水号 char(20)-->
 * <preFlg></preFlg><!--预约支付标志 0：非预约交易；1：预约交易 char(1)-->
 * <preDate></preDate><!--延期支付日期char(8) 格式YYYYMMDD ，预约时非空-->
 * <preTime></preTime><!--延期支付时间char(6) 格式hhmmss只限100000，120000，140000，160000 四个时间点，预约时非空-->
 * <payType></payType><!--支付方式 00：汇票； 01：中信内部转账；02：大额支付；03：小额支付；04：同城票交；05：网银跨行支付；B5：大额夜间支付 char(2)-->
 * <recBankNo></recBankNo><!--收款人所属银行行号 varchar(20)，可空，支付方式为05(网银跨行支付)时非空-->
 * <payAccountNo></payAccountNo><!--付款账号 char(19)-->
 * <recAccountNo></recAccountNo><!--收款账号 char(32)，当支付方式为00(汇票)时，收款账号可空-->
 * <recAccountName></recAccountName><!--收款账户名称 varchar(122)-->
 * <!--当支付方式payType不为05(网银跨行支付)时，其中收款账号开户行名与收款账号开户行联行网点号至少输一项-->
 * <recOpenBankName></recOpenBankName><!--收款账户开户行名(全称) varchar(122)-->
 * <recOpenBankCode></recOpenBankCode><!--收款账户开户行联行网点号 varchar(20)-->
 * <!--当支付方式payType不为05(网银跨行支付)时，其中收款账号开户行名与收款账号开户行联行网点号至少输一项-->
 * <citicbankFlag></citicbankFlag><!--中信标志 0：中信；1：他行 char(1)-->
 * <cityFlag></cityFlag><!--同城标志 0：同城；1：异地 char(1) 中信内转账可空-->
 * <tranAmount></tranAmount><!--金额 decimal(15,2)-->
 * <abstract></abstract><!--摘要 varchar(102) ，可空-->
 * <memo></memo><!--备注 varchar(60) ，可空-->
 * <takerName></takerName><!--取票人姓名，可空，当支付方式为汇票时输入 varchar(20)-->
 * <takerID></takerID><!--取票人证件号，可空，当支付方式为汇票时输入 varchar(30)-->
 * <takerIDType></takerIDType><!--取票人证件类型，当支付方式为汇票时输入，值域见附录4.1 char(1)-->
 * <chkNum></chkNum><!--对账编号char(20)，标签可空-->
 * </stream>
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "stream")
@Data
public class ExternalReq {

    private String action = RequestCode.EXTERNAL_PAYMENT;
    private String userName;                //<!--登录名 char(30)-->
    private String clientID;                //<!--客户流水号 char(20)-->
    private String preFlg;                  //<!--预约支付标志 0：非预约交易；1：预约交易 char(1)-->
    private String preDate;                 //<!--延期支付日期char(8) 格式YYYYMMDD ，预约时非空-->
    private String preTime;                 //<!--延期支付时间char(6) 格式hhmmss只限100000，120000，140000，160000 四个时间点，预约时非空-->
    private String payType;                 //<!--支付方式 00：汇票； 01：中信内部转账；02：大额支付；03：小额支付；04：同城票交；05：网银跨行支付；B5：大额夜间支付 char(2)-->
    private String recBankNo;               //<!--收款人所属银行行号 varchar(20)，可空，支付方式为05(网银跨行支付)时非空-->
    private String payAccountNo;            //<!--付款账号 char(19)-->
    private String recAccountNo;            //<!--收款账号 char(32)，当支付方式为00(汇票)时，收款账号可空-->
    private String recAccountName;          //<!--收款账户名称 varchar(122)-->
    //  !--当支付方式payType不为05(网银跨行支付)时，其中收款账号开户行名与收款账号开户行联行网点号至少输一项-->
    private String recOpenBankName;         //<!--收款账户开户行名(全称) varchar(122)-->
    private String recOpenBankCode;         //<!--收款账户开户行联行网点号 varchar(20)-->
    //  !--当支付方式payType不为05(网银跨行支付)时，其中收款账号开户行名与收款账号开户行联行网点号至少输一项-->
    private String citicbankFlag;           // !--中信标志 0：中信；1：他行 char(1)-->
    private String cityFlag;                //<!--同城标志 0：同城；1：异地 char(1) 中信内转账可空-->
    private BigDecimal tranAmount;          //<!--金额 decimal(15,2)-->
    private String abstract_;               //<!--摘要 varchar(102) ，可空-->
    private String memo;                    //<!--备注 varchar(60) ，可空-->
    private String takerName;               //<!--取票人姓名，可空，当支付方式为汇票时输入 varchar(20)-->
    private String takerID;                 //<!--取票人证件号，可空，当支付方式为汇票时输入 varchar(30)-->
    private String takerIDType;             // USE CertificateType <!--取票人证件类型，当支付方式为汇票时输入，值域见附录4.1 char(1)-->
    private String chkNum;                  //!--对账编号char(20)，标签可空-->
}
